#include <iostream>
using std::cout;
using std::endl;
//拷贝构造函数的调用时机
class Point{
public:
    Point(int x, int y)
    :_x(x)
    ,_y(y)
    {
        cout << "Point(int,int)" << endl;
    }

    Point(const Point & rhs)
    :_x(rhs._x)
    ,_y(rhs._y)
    {
        cout << "Point(const Point &)" << endl;
    }
    void print(){
        cout << "Point::print" << endl;
    }

private:
    int _x;
    int _y;


};
//拷贝构造函数的调用时机1：用一个已经存在的对象创建另外一个新对象
//探究：拷贝构造函数的调用时机2
//函数的形参是一个对象，实参和形参相结合的时候
//形参和实参结合的时候：Point p = pt;
//如果希望避免这一次的拷贝过程，可以怎么办？？？传递引用
//如果传递引用的话，有没有可能在func中对原对象进行修改呢？？
//但是也不希望原对象被修改 添加const
void func(Point p){
    p.print();
}

void func2(Point & p){
    p.print();
}

void test(){
    Point pt(1, 2);
    func(pt);
}

void test2(){
    Point pt(1, 2);
    func2(pt);
}

int main()
{
    test2();
    return 0;
}

